#include<iostream>


class Car//抽象产品
{
    public:
        virtual void show()=0;
};

class BMW:public Car//具体产品
{
public:
    BMW(int a){}
    void show()
    {
        std::cout<<"一辆宝马\n";
    }
};

class Benz:public Car
{
public:
  Benz(double b){}
  void show()
    {
        std::cout<<"一辆奔驰\n";
    }
};
class Audi:public Car
{
public:
  Audi(char c){}
  void show()
    {
        std::cout<<"一辆奥迪\n";
    }
};
class Factory//抽象工厂
{
    public:
        virtual Car *Create()=0;
};
class BMWfactory:public Factory
{
    public:
     Car *CreateBMW()
        {
            return new BMW(1);
        }

};
class Benzfactory:public Factory
{
     Car *CreateBenz()
        {
            return new  Benz(3.14);
        }

};
class Audifactory:public Factory
{
     Car *CreateAudi()
        {
            return new Audi('e');
        }
};


int main()
{
    Factory *f=new BMWfactory;
    Car *c=f->Create();
    c->show;


    return 0;
}
